package cn.fuck;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

public class TestLinkedList {
    public static void main(String[] args) {
        List<String> list = new LinkedList<>();
        // add方法添加到尾部,
        list.add("A");
        list.add("B");
        list.add("C");
        ListIterator<String> listIterator = list.listIterator();
        String first = listIterator.next();
        // Iterator接口的子接口提供add, set等方法
        listIterator.add("D");  // 在B之前加入D, 此时next指向D与B之间
        System.out.println(list);  // 调用的是AbstractCollection的toString
        listIterator.add("E");  // 一直add会放到B之前
        System.out.println(list.toString());
        // 反向遍历previous类似next
        while (listIterator.hasPrevious()) {
            listIterator.previous();
        }
        // 指向链表表头的迭代器调用 add 操作时
        //，
        //新添加
        //的元素将变成列表的新表头
        //。
        listIterator.add("First");
        System.out.println(list);
        while (listIterator.hasNext()) {
            listIterator.next();
        }
        /*
        当迭代器越过链表的最后一个元素时（即 hasNext 返回 false ),
添加的元素将变成列表的新表尾
         */
        listIterator.add("Last");
        System.out.println(list);
    }
}
